{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1. 画图解释图像卷积滤波的基本原理，并进一步简述常见的图像平滑滤波算法。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### A:按照图像滤波公式 \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![jupyter](./jpg/convolution_0.png) <br>卷积过程画图如下"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![jupyter](./jpg/convolution.png)<b><br><br>卷积滤波操作是选择适当的g(n,m).实际上做的是在固定大小的窗口内,做的加权平均所得的结果,作为窗口中心点的值.图像重的噪声,是与周围差异较大的孤立点,所以这应的处理结果,图形中的噪声就被“拉平了”<br>根据卷积模版的选择不同,对应不同的卷积滤波器,常见的有<I><font color=\"#ff0000\">平均滤波器</I></font>.<font color=\"#ff0000\">高斯滤波器</font><br>在图形滤波中,不使用卷积操作的,如<font color=\"#ff0000\">中值滤波器 图像形态学滤波器</font> 中值滤波器会过滤掉可以的像素点,而且并不会让此点影响到其他的像素.对椒盐噪声处理较好."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<b><font color=\"#3333ff\">疑问</b>?<br><font color=\"#3333ff\">1)卷积操作的每一次乘积求和操作处理的点,是窗口的中心点,那为什么卷积公式不是下边这种形式呢?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![jupyter](./jpg/convolution_1.png)<br><br><font color=\"#3333ff\">2)形态学滤波是怎么通过先开后闭去除噪声的呢?</font>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2. 简述边缘检测的基本原理，以及Sobel、LoG和Canny算子的原理差异。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "图像中的边缘为两个区域过度区域,在数学概念上该点的导数为极值点,二阶导数的过零点.在图像等离散数据上用差分近似.<br>Sober算子,可以作为上诉计算的卷积算子,计算像素点的梯度付值与角度,无附加特性.<br>LoG算子,在Laplace算子(求二阶导数)基础上,附加Gaussian滤波,过滤图像噪声,抑制误检测的边缘.<br>Canny算子分为4步:<br>1.同LoG算子,在使用Gaussian滤波过滤同时,求解微分.<br>2.根据XY方向上的差分求解梯度的角度与幅值,梯度角度离散化到45度间隔的0到360的8个方向上.<br>3.非极大值抑制:在检测到的点上,判断在梯度方向上,该点是否为极值点,不是的话,剔除.<br>4.连接断线:在最大阈值与最小阈值之间的点,判断邻域内是否有大于最大阈值的点,如果存在,该点也作为边缘点.<br><font color=\"#0000ff\"><b>疑问:1.怎么设定阈值?2)在非最大值抑制中,为什么边缘点一定是梯度方向上的灰度极值点?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3. 简述图像直方图的基本概念，及使用大津算法进行图像分割的基本原理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "灰度直方图为图像中灰度分布的统计信息.大津算法,就是利用灰度直方度区分背景和目标的灰度范围.具体是,在直方图中的双波峰所代表的两个区域,去一个阈值分割,<br>是两个区域的<font color=\"#ff0000\">类间方差</font>最大,因为灰度只有0-255个256个取之,采用遍历的方法很容易确定."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "--------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4. 简述Harris算子对角点的定义，进行角点检测的基本原理，并说明引入角点响应函数的意义。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Harris算子对角点,是在该点附近沿着xy两个方向上移动,都会造成灰度积分剧烈变化的点.<br>Harris角点检测基本思路是:设定一个小的区域,让其在图像中移动,<br>计算其在所对应位置时在其XY方向上移微小距离的情况,灰度积分方差的变化.因为是微小变化,所得公式,经过泰勒级数展开忽略掉高阶无穷小,化简得到 E=Au^2 + Bv^2+Cuv,其中uv,代表XY方向上的增量.由此可知,A越大X方向上的变化,E的变化越大.B的v的影响同样.<br>因为图像的整体灰度有大有小,由上面描述的方式检测的角点的难点是确定阈值.给定的角点响应函数解决了此问题."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "-------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 5. 简述Hough变换的基本原理(包括参数空间变换及参数空间划分网格统计)。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Hough变换是把边缘点从直角坐标系变换到极坐标系,因为在直角坐标系下,过某点的直线在极坐标系下是一个正余弦曲线.那么共线的点,极坐标系也必交于一点.在实际应用中,近似相交的点我们就认为是共线<br>具体做法是是,横向把极坐标空间0到2pi范围,纵向0到图像对角线长度的范围,划分为若干正方形,统计落在其内的曲线角点个数,设定阈值,大于阈值的就可以视为共线的点."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 6. 简述SIFT原理(重点是尺度空间和方向直方图原理)及ORB算子原理(重点是FAST和BRIEF)。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "SIFT是在尺度空间中完成特征检测,具体是通过高斯模糊和降采样构造O*S张图像,作为垂直与XY平面的第三个轴在此空间中通过微分检测极值点.为了使该算法具有方向不变性,在检测点所对应的窗口上,计算窗口内个点的梯度幅值,与方向.以幅值为权重,做方向的直方图,选择最大的方向,最为标准方向."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "FAST算法,是判断给定点的邻域圆周上,判断是否多个点全大或者全小与中心点,一次作为特征点依据"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
